/*
 * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.awt.dnd;

import java.io.OutputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;
import java.io.Serializable;

/**
 * Tests if an object can truly be serialized by serializing it to a null
 * OutputStream.
 *
 * @since 1.4
 */
final class SerializationTester {

  private static ObjectOutputStream stream;

  static {
    try {
      stream = new ObjectOutputStream(new OutputStream() {
        public void write(int b) {
        }
      });
    } catch (IOException cannotHappen) {
    }
  }

  static boolean test(Object obj) {
    if (!(obj instanceof Serializable)) {
      return false;
    }

    try {
      stream.writeObject(obj);
    } catch (IOException e) {
      return false;
    } finally {
      // Fix for 4503661.
      // Reset the stream so that it doesn't keep a reference to the
      // written object.
      try {
        stream.reset();
      } catch (IOException e) {
        // Ignore the exception.
      }
    }
    return true;
  }

  private SerializationTester() {
  }
}
